/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Calculos;

import java.util.ArrayList;

/**
 *
 * @author Isabela
 */
public class EngastadaInvertidaDistribuida extends CalculaDistribuida{

     private ArrayList<double []> cargaDistribuida=new ArrayList<double[]>();
     private double incremento=0.005;


    public EngastadaInvertidaDistribuida(double  inicioViga) {
        super(inicioViga);
    }


    @Override
    public void CalculaCargaDistribuida(double forcadistribuida,double comprimentocarga,double tamanhoviga,double posicaoInicial){
        CalculaFuncaoMomentoFletor(forcadistribuida, comprimentocarga, tamanhoviga, posicaoInicial);
        CalculaFuncaoEsforcoCortante(forcadistribuida, comprimentocarga, tamanhoviga, posicaoInicial);

    }

    private void CalculaFuncaoMomentoFletor(double forcadistribuida,double comprimentocarga,double tamanhoviga,double posicaoInicial){


        int tamanhoVetor=(int) (tamanhoviga / incremento);
        double y[]=new double[tamanhoVetor];
        double x[]=new double[tamanhoVetor];
        for(int i=1;i<tamanhoVetor;i++){
            x[i]=x[i-1]+incremento;
        }

        for(int i=0;i<tamanhoVetor;i++){
                if(x[i]<=(posicaoInicial)){//primeiro intervalo (x antes do inicio da carga distribuida)
                    y[i]=0;
                }
                //entervalo que contem a carga
                else if((x[i]>=(posicaoInicial)) && (x[i]<=((posicaoInicial)+comprimentocarga))){
                    y[i]=(-1*(forcadistribuida*(Math.pow((x[i]-posicaoInicial), 2))))/2;
                }
                    // por fim quando x estiver no intervalo após a carga
                else if((x[i]>=((posicaoInicial)+comprimentocarga))){
                    y[i]=-1*(forcadistribuida*(x[i]-((posicaoInicial+comprimentocarga)/2)));
                }
        }

      //  new Graficos("Gráfico Momento Fletor",x, y);// gera o gráfico
        cargaDistribuida.add(x);//adicionando  o vetor com os dados x fletor
        cargaDistribuida.add(y);//vetor com dados y fletor

    }


    private void CalculaFuncaoEsforcoCortante(double forcadistribuida, double comprimentocarga, double tamanhoviga, double posicaoInicial) {

        int tamanhoVetor = (int) (tamanhoviga / incremento);
        double y[] = new double[tamanhoVetor];
        double x[] = new double[tamanhoVetor];
        for (int i = 1; i < tamanhoVetor; i++) {
            x[i] = x[i - 1] + incremento;
        }

        for (int i = 0; i < tamanhoVetor; i++) {
            if (x[i] <= (posicaoInicial)) {//primeiro intervalo (x antes do inicio da carga distribuida)
                y[i] = 0;
            } //entervalo que contem a carga
            else if ((x[i] >= (posicaoInicial)) && (x[i] <= ((posicaoInicial) + comprimentocarga))) {
                y[i] =-1*(forcadistribuida*(x[i]-posicaoInicial));
            } // por fim quando x estiver no intervalo após a carga
            else if ((x[i] >= ((posicaoInicial) + comprimentocarga))) {
                y[i] = -1 * forcadistribuida;
            }
        }

         cargaDistribuida.add(x);
         cargaDistribuida.add(y);

    }


     public  double CalculaFuncaoMomentoFletorNoPonto(double x,double forcadistribuida,double comprimentocarga,double tamanhoviga,double posicaoInicial){
         double resultado=0.0;

         if(x<=(posicaoInicial)){//primeiro intervalo (x antes do inicio da carga distribuida)
                    resultado=0;
                }
                //entervalo que contem a carga
                else if((x>=(posicaoInicial)) && (x<=((posicaoInicial)+comprimentocarga))){
                    resultado=(-1*(forcadistribuida*(Math.pow((x-posicaoInicial), 2))))/2;
                }
                    // por fim quando x estiver no intervalo após a carga
                else if((x>=((posicaoInicial)+comprimentocarga))){
                    resultado=-1*(forcadistribuida*(x-((posicaoInicial+comprimentocarga)/2)));
                }
         return resultado;
     }

    @Override
    public ArrayList<double[]> getCargaDistribuida() {
        return cargaDistribuida;
    }




}
